home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 38 / Amiga Format CD38 (1999-03-15)(Future Publishing)(GB)(Track 1 of 3)[!][issue 1999-04].iso / -seriously_amiga- / misc / felix / source / freshlocale.cpp < prev    next >
C/C++ Source or Header  |  1999-01-25  |  3KB  |  134 lines

  1. //*************************************************************************//
  2. // Filename:    FreshLocale.cpp
  3. // Autor:       Christian Taulien of Strange Intelligence
  4. // Purpose:     common localizing Localizing FRESH-Software by SI
  5. // Creation:    31. März 1998
  6. //*************************************************************************//
  7.  
  8. #include "global.h"
  9. #include "FreshLocale.h"
  10.  
  11. #include <string.h>
  12.  
  13. #include <clib/locale_protos.h>
  14. #include <clib/utility_protos.h>
  15.  
  16. CatalogC *glob_poCatalog = NULL;
  17.  
  18. CatalogC::CatalogC(char *arg_sName, ULONG arg_ulVersion /*= NULL*/, struct Locale *arg_poLocale /*= NULL*/)
  19. /*S*/
  20.   m_poCatalog = NULL;
  21.   openCatalog(arg_sName, arg_poLocale,
  22.       OC_Version, arg_ulVersion,
  23.       TAG_DONE);
  24. }
  25. /*E*/
  26. CatalogC::CatalogC(char *arg_sName, struct Locale *arg_poLocale, ULONG arg_eTags ...)
  27. /*S*/
  28.   m_poCatalog = NULL;
  29.   openCatalog(arg_sName, arg_poLocale, (struct TagItem *) &arg_eTags);
  30. }
  31. /*E*/
  32. CatalogC::~CatalogC()
  33. /*S*/
  34. {
  35.   closeCatalog();
  36. }
  37. /*E*/
  38. BOOL CatalogC::openCatalog(char *arg_sName, struct Locale *arg_poLocale /*= NULL*/, struct TagItem *arg_poTagList /*= NULL*/)
  39. /*S*/
  40. {
  41.   // Schließen, wenn katalog noch offen
  42.   closeCatalog();
  43.  
  44.   // einfach versuchen den catalog zu öffnen
  45.   m_poCatalog = OpenCatalogA(arg_poLocale, arg_sName, arg_poTagList);
  46.   if (m_poCatalog)
  47.   {
  48.     TRACE("open ok");
  49.   }
  50.   else
  51.   {
  52.     TRACE("no open");
  53.   } // if
  54. return isOpen();
  55. }
  56. /*E*/
  57. BOOL CatalogC::openCatalog(char *arg_sName, struct Locale *arg_poLocale, ULONG arg_eTags ...)
  58. /*S*/
  59. {
  60.   // rufe die richtige methode auf
  61. return openCatalog(arg_sName, arg_poLocale, (struct TagItem *) &arg_eTags);
  62. }
  63. /*E*/
  64. void CatalogC::closeCatalog()
  65. /*S*/
  66. {
  67.   TRACE("");
  68.   // wenn Catalog überhaupt offen
  69.   if (m_poCatalog)
  70.   {
  71.     CloseCatalog(m_poCatalog);
  72.     m_poCatalog = NULL;
  73.   } // if
  74. }
  75. /*E*/
  76. char CatalogC::getShortCut(int arg_iStringNum)
  77. /*S*/
  78. {
  79.   char *sString = getString(arg_iStringNum);
  80.   char cShortCut = '\0';
  81.  
  82.   // wenn string gefunden
  83.   if (sString)
  84.   {
  85.     int iLen = strlen(sString);
  86.     for (int i=0; i<iLen; ++i)
  87.     {
  88.       // wenn underscore gefunden und noch min. ein zeichen danach
  89.       // vorhanden
  90.       if (sString[i] == '_' && (i < iLen-1))
  91.       {
  92.         // shortcut gefunden. Schleife verlassen
  93.         cShortCut = sString[i+1];
  94.         break;
  95.       } // if
  96.     } // for
  97.   } // if
  98.  
  99. return cShortCut;
  100. }
  101. /*E*/
  102. char CatalogC::getShortCutLowerCase(int arg_iStringNum)
  103. /*S*/
  104. return ToLower(getShortCut(arg_iStringNum));
  105. }
  106. /*E*/
  107. unsigned char *CatalogC::getString(int arg_iStringNum)
  108. /*S*/
  109. {
  110.   // wenn ungültiger string
  111.   if (!(SIFC_BETWEEN(arg_iStringNum, FIRST_POSSIBLE_TEXT, LAST_POSSIBLE_TEXT)
  112.      || SIFC_BETWEEN(arg_iStringNum, FIRST_POSSIBLE_ERROR, LAST_POSSIBLE_ERROR)))
  113.   {
  114.     arg_iStringNum = T_UNDEFINED;
  115.   } // if
  116.  
  117.   // wenn catalog offen
  118.   if (m_poCatalog)
  119.   {
  120.     TRACE("über GetCatalogStr()");
  121.     return GetCatalogStr(m_poCatalog, arg_iStringNum, glob_asInternCatalog[arg_iStringNum]);
  122.   }
  123.   else
  124.   {
  125.     TRACE("intern");
  126.     return glob_asInternCatalog[arg_iStringNum];
  127.   } // if
  128. }
  129. /*E*/
  130.  
  131.